package main

import "sync"

// 实现数组队列 ArrayQueue
type ArrayQueue struct {
	array []string   //底层切片
	size  int        //队列得元素数量
	lock  sync.Mutex //并发安全得锁
}

// 入队
func (queue *ArrayQueue) Add(v string) {
	queue.lock.Lock()
	defer queue.lock.Unlock()

	//放入切片中，后进的元素放在数组最后面
	queue.array = append(queue.array, v)
	//队列中元素数量+1
}

//出队
func (queue *ArrayQueue) Remove() string {
	queue.lock.Lock()
	defer queue.lock.Unlock()

	//队中元素已空
	if queue.size == 0 {
		panic("empty")
	}

	//队列最前面元素
	v := queue.array[0]
	//创建新的数组，移送次数过多
	newArray := make([]string, queue.size-1, queue.size-1)
	for i := 0; i < queue.size; i++ {
		//从老数组的第一位开始进行数据移动
		newArray[i-1] = queue.array[i]
	}
	queue.array = newArray

	//队中元素数量-1
	queue.size = queue.size - 1
	return v
}

func main() {

}
